<?php
/**
* 2017年3月28日 13:43:05
* author:silenceluo
* email:1095584081@qq.com
* 公共方法类
*/
final class Common
{

	/**
	 * 判断一个字符串是否为时间格式
	 * @param  string  $dateStr [时间字符串]
	 * @return boolean          [description]
	 */
	public static function _isDate($dateStr = ""){
	  	return date('Y-m-d H:i:s', strtotime($dateStr)) === $dateStr?true:false;
	}

	public static function __isDate($dateStr = ""){
	  	return date('Y-m-d', strtotime($dateStr)) === $dateStr?true:false;
	}
	/**
	 * 2017年3月29日 10:29:31
	 * 主要有三种防xss方法
	 * ① htmlspecialchars()方法
	 * ② config 425行 $config['global_xss_filtering'] = FALSE; 设置为false 网上说会增加服务器负荷
	 * ③ $this->input->post('name',true); 这种方式没找到统一过滤所有表单信息的方法
	 * @param  [type] $input [description]
	 * @return [type]        [description]
	 */
	public static function _clean($input){
	    
	    if (is_array($input))
	    {
	        foreach ($input as $key => $val)
	         {	
	         	//递归调用该方法
	            $output[$key] = self::_clean($val);
	        }
	    }
	    else
	    {
	        $output = (string) $input;
	        
	        //为 GPC (Get/Post/Cookie) 操作设置 magic_quotes 状态。 当 magic_quotes 为 on，所有的 ' (单引号)、" (双引号)、\（反斜杠）和 NUL's 被一个反斜杠自动转义。
	        if (get_magic_quotes_gpc()) 
	        {	
	        	//返回一个去除转义反斜线后的字符串（\' 转换为 ' 等等）。双反斜线（\\）被转换为单个反斜线（\）。
	            $output = stripslashes($output);
	        }

	        //把字符转换为 HTML 实体
	        $output = htmlentities($output, ENT_QUOTES, 'UTF-8');
	    }
	    
	    //返回处理后的数据
	    return $output;
	}
	/**
	 * 2017年3月29日 11:17:25
	 * 获取用户真实IP地址
	 * @return [type] [description]
	 */
	public static function getRealIpAddr(){

	    if (!empty($_SERVER['HTTP_CLIENT_IP']))  
	    {  
	        $ip = $_SERVER['HTTP_CLIENT_IP'];  
	    }  
	    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
	    {
	        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];  
	    }
	    else
	    {
	        $ip = $_SERVER['REMOTE_ADDR'];  
	    } 
	    return $ip;  
	}
	/**
	 * 拒绝某些ip的访问
	 * @param  [type] $ip [description]
	 * @return [type]     [description]
	 */
	public static function refuse_ip(){
		if ( !file_exists('blocked_ips.txt') ) {
			 $deny_ips = array(
			  '127.0.0.1',
			  '192.168.1.1',
			  '83.76.27.9',
			  '192.168.1.163'
			 );
		} else {
			 $deny_ips = file('blocked_ips.txt');
		}
		// 获取用户真实ip
		$ip = self::getRealIpAddr();
			 
		// 判断当前ip是否在被拒绝的ip列表里面
		
		if ( (array_search($ip, $deny_ips))!== FALSE ) {
			// ip被拒绝
			return false;
		}

		return true;
	}
	/**
	 * 计算两个坐标之间的距离
	 * @param  [type] $latitude1  [第一个坐标经度]
	 * @param  [type] $longitude1 [第一个坐标纬度]
	 * @param  [type] $latitude2  [第二个坐标经度]
	 * @param  [type] $longitude2 [第二个坐标纬度]
	 * @return [type]             [description]
	 */
	public static function getDistanceBetweenPoints($latitude1, $longitude1, $latitude2, $longitude2) {
	    $theta = $longitude1 - $longitude2;
	    $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)));
	    $miles = acos($miles);
	    $miles = rad2deg($miles);
	    $miles = $miles * 60 * 1.1515;
	    $feet = $miles * 5280;
	    $yards = $feet / 3;
	    $kilometers = $miles * 1.609344;
	    $meters = $kilometers * 1000;
	    return compact('miles','feet','yards','kilometers','meters'); 
	}
	/**
	 * 检测url是否有效
	 * @param  [type] $url [description]
	 * @return [type]      [description]
	 */
	public static function isvalidURL($url){
		$check = false;
		if (filter_var($url, FILTER_VALIDATE_URL) !== false) {
		  $check = true;
		}
		return $check;
	}
	/**
	 * 2017年3月29日 11:33:46
	 * 词义化时间
	 * @param  [type] $from [description]
	 * @param  [type] $now  [description]
	 * @return [type]       [description]
	 */
	public static function dateWord($from, $now)
	{
		
		/** 如果不是同一年 */
        if (idate('Y', $now) != idate('Y', $from)) 
        {
            return date('Y年m月d日', $from);
        }
		
		/** 以下操作同一年的日期 */
		$seconds = $now - $from;
        $days = idate('z', $now) - idate('z', $from);
        
        /** 如果是同一天 */
        if ($days == 0) 
        {
        	/** 如果是一小时内 */
            if ($seconds < 3600) 
            {
            	/** 如果是一分钟内 */
                if ($seconds < 60)
                {
                    if (3 > $seconds)
                    {
                        return '刚刚';
                    } 
                    else 
                    {
                        return sprintf('%d秒前', $seconds);
                    }
                }

                return sprintf('%d分钟前', intval($seconds / 60));
            }

            return sprintf('%d小时前', idate('H', $now) - idate('H', $from));
        }

		/** 如果是昨天 */
        if ($days == 1) 
        {
            return sprintf('昨天 %s', date('H:i', $from));
        }
        
        /** 如果是前天 */
        if ($days == 2) 
        {
        	return sprintf('前天 %s', date('H:i', $from));
        }

        /** 如果是7天内 */
        if ($days < 7) 
        {
            return sprintf('%d天前', $days);
        }

        /** 超过一周 */
        return date('n月j日', $from);
	}
	/*
	 * 发布于时间
	 * 2017年3月29日 12:05:56
	 * 1年为31104000
	 */
	public static function from_time($time){
	    $way = time() - $time;
	    $r = '';
	    if($way < 60){
	        $r = '刚刚';
	    }elseif($way >= 60 && $way <3600){
	        $r = floor($way/60).'分钟前';
	    }elseif($way >=3600 && $way <86400){
	        $r = floor($way/3600).'小时前';
	    }elseif($way >=86400 && $way <2592000){
	        $r = floor($way/86400).'天前';
	    }elseif($way >=2592000 && $way <31104000){
	        $r = floor($way/2592000).'个月前';
	    }elseif($way >=31104000){
	        $r = floor($way/31104000).'年前';
	    }
	    return $r;
	}
	/**
	 * 处理父子关系数组
	 * array(
	 * 	array('id'=>1,'pid'=>0),
	 * 	array('id'=>2,'pid'=>0),
	 * 	array('id'=>3,'pid'=>1),
	 * 	array('id'=>4,'pid'=>2),
	 * );
	 * Common::dealList($array);
	 * @param  [type]  $list      [description]
	 * @param  integer $parent_id [description]
	 * @return [type]             [description]
	 */
     public static function dealList($list,$parent_id=0,$parent_index='pid',$self_index='id'){
        //格式化数组
        $formatList = array();
        
        foreach ($list as $key=>$value) {
            if($list[$key][$parent_index]==$parent_id){
                
                $list[$key]['child'] = self::dealList($list,$list[$key][$self_index],$parent_index,$self_index);
               
                $formatList[] = $list[$key];

            }

        }
        return $formatList;
    }
    /**
     * 判断http请求是否为ajax请求
     * @return boolean [description]
     */
    public static function isAjax()
    {
    	if( isset($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') )
			return TRUE;
		else
			return FALSE;
    }	
    /**
     * 随机获取颜色
     * @return [type] [description]
     */
	public static function randColor()  
	{  
	  $str='0123456789ABCDEF';  
	    $estr='#';  
	    $len=strlen($str);  
	    for($i=1;$i<=6;$i++)  
	    {  
	        $num=rand(0,$len-1);    
	        $estr=$estr.$str[$num];   
	    }  
	    return $estr;  
	} 
}